import { toRaw } from "vue";

/**
 * 处理过滤的数据  处理成 接口需要的数据
 * @param {*} data
 */
export const FilterValueFormat = (data: any) => {
  let obj: any = {};
  // console.log("888",data)
  for (let index = 0; index < data.length; index++) {
    const element = data[index];
    if (element.type == "single") {
      obj[element.key] = element.value[0]["value"];
    } else {
      let val = element.value.map((res: any) => res.value);
      obj[element.key] = val;
    }
  }
  return obj;
};

/**
 * oldData 历史过滤数据
 * key对应的筛选key
 * item 新增的筛选条件 高级筛选 要用
 * @param {*} param0
 */
export const FilterTag = ({ oldData, key, item, title, type }: any) => {
  let data: any = [];
  let bool = oldData.find((res: any) => res.key == key);
  if (bool) {
    // 有筛选条件 目前用不到
    for (let index = 0; index < oldData.length; index++) {
      const element = oldData[index];
      if (element.key == key) {
        element.value = element.value.concat(item);
        //去重
        const arr = element.value.map((res: any) => JSON.stringify(res));
        const setarr = new Set(arr);
        element.value = Array.from(setarr, (x: any) => JSON.parse(x));
        break;
      }
    }
    data = oldData;
  } else {
    // 没有筛选条件
    data = data.concat(oldData);
    data.push({
      key: key,
      title: title,
      type: type,
      value: item ? item : [],
    });
  }
  return data;
};

/**
 * 处理过滤指定的数据  高级筛选 要用
 * @param {*} data
 */
export const FilterClearKey = ({ data, key }: any) => {
  data = JSON.parse(JSON.stringify(data));
  // data = toRaw(data)
  data = data.filter((res: any) => {
    return res.key != key;
  });
  return data;
};

/**
 * 处理过滤非法的数据  高级筛选 要用
 * @param {*} data
 */
export const FilterValue = (data: any) => {
  data = JSON.parse(JSON.stringify(data));
  data = data.filter((res: any) => {
    return res.value && res.value.length > 0;
  });
  return data;
};

/**
 * 重置高级筛选数据  高级筛选 要用
 * @param {*} data
 */
export const resetFilter = (data: any) => {
  for (const key in data) {
    if (Object.hasOwnProperty.call(data, key)) {
      data[key] = null;
    }
  }
  return data;
};

/**
 * 高级筛选 整合函数
 * @param {*} data 当前筛选返回的数据 key 筛选字段 title 表头名字 filters 当前高级筛选内容
 * @returns 高级筛选数据
 */
export const getFormData = ({ data, key, title, type, filters }: any) => {
  //清空指定字段数据
  filters = FilterClearKey({
    data: filters,
    key,
  });

  //数据去重 更新数据
  let newfilters = FilterTag({
    title,
    key,
    oldData: filters,
    item: data,
    type: type,
  });
  //过滤不合法的数据
  filters = FilterValue(newfilters);
  return filters;
};
